/* eslint-disable no-param-reassign */
import {
    fetchGood
} from '@/services/good/fetchGood';
import {
    LIST_LOADING_STATUS
} from '../../../utils/listLoading';
import Toast from 'tdesign-miniprogram/toast/index';

const initFilters = {
    overall: 1,
    sorts: '',
    layout: 0,
};

Page({
    data: {
        goodsList: [],
        layout: 0,
        sorts: '',
        overall: 1,
        show: false,
        minVal: '',
        maxVal: '',
        filter: initFilters,
        hasLoaded: false,
        loadMoreStatus: 0,
        loading: true,
        goodsListLoadStatus: LIST_LOADING_STATUS.READY,
    },

    pageNum: 1,
    pageSize: 30,
    total: 0,

    handleFilterChange(e) {
        const {
            layout,
            overall,
            sorts
        } = e.detail;
        this.pageNum = 1;
        this.setData({
            layout,
            sorts,
            overall,
            loadMoreStatus: 0,
        });
        this.init();
    },

    generalQueryData(reset = false) {
        const {
            filter,
            keywords,
            minVal,
            maxVal
        } = this.data;
        const {
            pageNum,
            pageSize
        } = this;
        const {
            sorts,
            overall
        } = filter;
        const params = {
            sort: 0, // 0 综合，1 价格
            pageNum: 1,
            pageSize: 30,
            keyword: keywords,
        };

        if (sorts) {
            params.sort = 1;
            params.sortType = sorts === 'desc' ? 1 : 0;
        }

        if (overall) {
            params.sort = 0;
        } else {
            params.sort = 1;
        }
        params.minPrice = minVal ? minVal * 100 : 0;
        params.maxPrice = maxVal ? maxVal * 100 : undefined;
        if (reset) return params;
        return {
            ...params,
            pageNum: pageNum + 1,
            pageSize,
        };
    },

    async init() {
        this.loadGoodsList();
    },

    async loadGoodsList() {
        this.setData({
            goodsListLoadStatus: LIST_LOADING_STATUS.LOADING
        });

        try {
            fetchGood().then((res) => {
                this.setData({
                    goodsList: res.rows,
                    goodsListLoadStatus: LIST_LOADING_STATUS.NO_MORE,
                });
            })
        } catch (err) {
            console.error('error', err);
            this.setData({
                goodsListLoadStatus: LIST_LOADING_STATUS.FAILED
            });
        }
    },
    cateId: null,

    onLoad() {
        this.init();
    },

    onReachBottom() {
        const {
            goodsList
        } = this.data;
        const {
            total = 0
        } = this;
        if (goodsList.length === total) {
            this.setData({
                loadMoreStatus: 2,
            });
            return;
        }
        this.init(false);
    },

    handleAddCart() {
        Toast({
            context: this,
            selector: '#t-toast',
            message: '点击加购',
        });
    },

    tagClickHandle() {
        Toast({
            context: this,
            selector: '#t-toast',
            message: '点击标签',
        });
    },

    gotoGoodsDetail(e) {
        const spuId = e?.detail?.goods?._id;
        if (typeof spuId !== 'string') return;

        wx.navigateTo({
            url: `/pages/goods/details/index?spuId=${spuId}`,
        });
    },

    showFilterPopup() {
        this.setData({
            show: true,
        });
    },

    showFilterPopupClose() {
        this.setData({
            show: false,
        });
    },

    onMinValAction(e) {
        const {
            value
        } = e.detail;
        this.setData({
            minVal: value
        });
    },

    onMaxValAction(e) {
        const {
            value
        } = e.detail;
        this.setData({
            maxVal: value
        });
    },

    reset() {
        this.setData({
            minVal: '',
            maxVal: ''
        });
    },

    confirm() {
        const {
            minVal,
            maxVal
        } = this.data;
        let message = '';
        if (minVal && !maxVal) {
            message = `价格最小是${minVal}`;
        } else if (!minVal && maxVal) {
            message = `价格范围是0-${minVal}`;
        } else if (minVal && maxVal && minVal <= maxVal) {
            message = `价格范围${minVal}-${this.data.maxVal}`;
        } else {
            message = '请输入正确范围';
        }
        if (message) {
            Toast({
                context: this,
                selector: '#t-toast',
                message,
            });
        }
        this.pageNum = 1;
        this.setData({
                show: false,
                minVal: '',
                goodsList: [],
                loadMoreStatus: 0,
                maxVal: '',
            },
            () => {
                this.init();
            },
        );
    },
});